/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sistema.aplicacao;

import com.interact.sas.cmn.ApplicationContext;
import com.interact.sas.cmn.db.services.Database;
import com.interact.sas.cmn.db.services.QueryResult;
import com.interact.sas.cmn.util.Login;
import com.interact.sas.cmn.util.Prompts;
import com.interact.sas.qms.data.Occurrence;
import com.interact.sas.qms.data.OccurrenceType;
import com.interact.sas.qms.util.Inspector;
import com.interact.sas.qms.util.OccurrenceFormFactory;
import java.awt.event.ActionEvent;
import java.sql.*;
import com.sistema.db.Banco;
import com.sistema.db.LerProperties;
import com.sistema.tools.Data;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import org.jdesktop.swingx.JXDatePicker;

/**
 *
 * @author geraldo
 */
public class PanelListarLigacoes extends JPanel
{

    private JTable tabLigacoes;
    private DefaultTableModel modeloTabela;
    private DefaultTableModel modeloTabela2;
    private JScrollPane scroller;
    private JXDatePicker txt_dt_inicio;
    private JXDatePicker txt_dt_fim;
    private JButton btnExcluir;
    private JButton btnLimpar;
    private JButton btnImprimir;
    private JLabel lblTotal_ligacoes;
    private JLabel lblTotal_realizadas;
    private JLabel lblTotal_recebidas;
    private JCheckBox checkMinhasLig;
    private JCheckBox checkDesagrupar;
    private JComboBox comboClientes;
    private JPopupMenu pop;
    private JMenu menu;
    private JMenuItem itemVisualizar;
    private JMenu menu2;
    private JMenuItem itemCadastrarTicket;
    private JPopupMenu pop2;
    private Occurrence ocorrencia = new Occurrence();
    private LerProperties properties = new LerProperties();
    private String consulta = "";


    public PanelListarLigacoes()
    {

        setVisible( true );
        setLayout( null );
        setSize( 800, 600 );
        iniciaComponentes();
        actions();
    }

    public void iniciaComponentes()
    {


        add( new JLabel( "Data Inicio:" ) ).setBounds( 70, 20, 80, 30 );
        txt_dt_inicio = new JXDatePicker();
        txt_dt_inicio.setToolTipText( "Seleciona um período inicial para as ligações" );
        add( txt_dt_inicio ).setBounds( 165, 20, 150, 30 );

        add( new JLabel( "Data Fim:" ) ).setBounds( 395, 20, 80, 30 );
        txt_dt_fim = new JXDatePicker();
        txt_dt_fim.setToolTipText( "Seleciona um período final para as ligações" );
        add( txt_dt_fim ).setBounds( 485, 20, 150, 30 );


        checkMinhasLig = new JCheckBox( "Minhas Ligações" );
        checkMinhasLig.setToolTipText( "Listar as ligações realizadas pelo seu usuário" );
        add( checkMinhasLig ).setBounds( 215, 100, 150, 30 );


        checkDesagrupar = new JCheckBox( "Desagrupar Ligações" );
        checkDesagrupar.setToolTipText( "Listar as ligações realizadas pelo seu usuário de maneira individual" );
        add( checkDesagrupar ).setBounds( 410, 100, 180, 30 );
        checkDesagrupar.setEnabled( false );



        //ComboBox Clientes
        comboClientes = new JComboBox();
        comboClientes.setToolTipText( "Selecione o cliente para filtrar as ligações" );

        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT descricao FROM clientes" );
        conn.fecha();

        try
        {

            comboClientes.addItem( "Todos" );

            while ( rs.next() )
            {
                comboClientes.addItem( rs.getString( "descricao" ) );
            }
        } catch ( Exception e )
        {
            e.printStackTrace();
        }

        add( new JLabel( "Clientes: " ) ).setBounds( 70, 60, 80, 30 );
        add( comboClientes ).setBounds( 165, 60, 470, 30 );

        btnExcluir = new JButton( "Excluir" );
        btnExcluir.setToolTipText( "Exclui a ligação selecionada" );
        btnExcluir.setIcon( new ImageIcon( getClass().getResource( "/img/img_excluir.png" ) ) );
        add( btnExcluir ).setBounds( 485, 140, 150, 30 );
        btnExcluir.setEnabled( false );

        btnLimpar = new JButton( "Limpar Filtro" );
        btnLimpar.setToolTipText( "Limpa os valores dos campos" );
        btnLimpar.setIcon( new ImageIcon( getClass().getResource( "/img/img_limpar.png" ) ) );
        add( btnLimpar ).setBounds( 325, 140, 150, 30 );


        ImageIcon img_imprimir = new ImageIcon( ( getClass().getResource( "/img/img_imp.png" ) ) );
        btnImprimir = new JButton( "Imprimir" );
        btnImprimir.setToolTipText( "Realizar a impressão do relatório de ligações" );
        btnImprimir.setIcon( img_imprimir );
        add( btnImprimir ).setBounds( 165, 140, 150, 30 );

        add( new JLabel( "Recebidas: " ) ).setBounds( 75, 535, 90, 30 );
        add( lblTotal_recebidas = new JLabel( "" ) ).setBounds( 155, 535, 100, 30 );

        add( new JLabel( "Realizadas: " ) ).setBounds( 330, 535, 100, 30 );
        add( lblTotal_realizadas = new JLabel( "" ) ).setBounds( 417, 535, 100, 30 );

        add( new JLabel( "Total de Ligações: " ) ).setBounds( 550, 535, 140, 30 );
        add( lblTotal_ligacoes = new JLabel( "" ) ).setBounds( 682, 535, 100, 30 );

        modeloTabela = new DefaultTableModel();
        modeloTabela.addColumn( "Cliente" );
        modeloTabela.addColumn( "Ligações Recebidas" );
        modeloTabela.addColumn( "Ligações Realizadas" );


        modeloTabela2 = new DefaultTableModel();
        modeloTabela2.addColumn( "id" );
        modeloTabela2.addColumn( "Cliente" );
        modeloTabela2.addColumn( "Ligações Recebidas" );
        modeloTabela2.addColumn( "Ligações Realizadas" );
        modeloTabela2.addColumn( "Ticket" );
        modeloTabela2.addColumn( "id_ticket" );
        modeloTabela2.addColumn( "Data" );
        modeloTabela2.addColumn( "Hora" );



        tabLigacoes = new JTable( modeloTabela )
        {

            public boolean isCellEditable( int rowIndex, int vColIndex )
            {
                return false;
            }
        };


        tabLigacoes.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

        scroller = new JScrollPane( tabLigacoes );
        add( scroller ).setBounds( 35, 180, 700, 350 );

        atualizaTabela();



        //JPopupMenu
        menu = new JMenu();
        itemVisualizar = new JMenuItem( "Visualizar ticket" );
        itemVisualizar.setIcon( new ImageIcon( getClass().getResource( "/img/img_visualizar.png" )) );
        menu.add( itemVisualizar );

        pop = menu.getPopupMenu();


        //JPopupMenu2
        menu2 = new JMenu();
        itemCadastrarTicket = new JMenuItem( "Cadastrar Ticket" );
        itemCadastrarTicket.setIcon( new ImageIcon( getClass().getResource( "/img/img_ticket.png" )) );
        menu2.add( itemCadastrarTicket );

        pop2 = menu2.getPopupMenu();

    }

    public void actions()
    {

       btnImprimir.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e )
            {

                String dtInicio = "";
                String dtFim = "";
                SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );

                atualizaTabela();

               try
                {

                    Banco conn = new Banco();
                    ResultSet rs = conn.executarConsulta( consulta );
                    conn.fecha();

                    JRDataSource jrd = new JRResultSetDataSource( rs );
                    JasperReport j = ( JasperReport ) JRLoader.loadObject( getClass().getResource( "/relatorios/relatorio1.jasper" ) );

                    HashMap a = new HashMap();

                    //busca data inicio
                    try
                    {
                        dtInicio = sdf.format( txt_dt_inicio.getDate() );

                        if( !dtInicio.equalsIgnoreCase( "" ) )
                        {
                            a.put( "dt_inicio", dtInicio );
                        }

                    } catch ( Exception g )
                    {
                    }


                    //busca data fim
                    try
                    {

                        dtFim = sdf.format( txt_dt_fim.getDate() );

                        if( !dtFim.equalsIgnoreCase( "" ) )
                        {
                            a.put( "dt_fim", dtFim );
                        }

                    } catch ( Exception g )
                    {
                    }
                    
                    a.put( "total_ligacoes", lblTotal_ligacoes.getText() );
                    a.put( "lig_recebidas", lblTotal_recebidas.getText() );
                    a.put( "lig_realizadas", lblTotal_realizadas.getText() );

                    
                    JasperPrint p = JasperFillManager.fillReport( j, a, jrd );
                    new JasperViewer( p, false ).setVisible( true );

                }catch( Exception k )
                {
                    k.printStackTrace();
                }
            }
        });



        btnExcluir.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                int linha = tabLigacoes.getSelectedRow();

                if ( linha != -1 )
                {

                    Object valor = modeloTabela2.getValueAt( linha, 0 );
                    String[] s = new String[]
                    {
                        "Sim", "Não"
                    };

                    int msg = JOptionPane.showOptionDialog( null, "Você tem certeza que deseja excluir essa ligação?", "Mensagem", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, s, "Ok" );

                    switch ( msg )
                    {
                        case ( JOptionPane.YES_OPTION ):
                        {

                            try
                            {
                                Banco conn = new Banco();
                                conn.executarAtualizacao( "DELETE FROM ligacoes WHERE id = " + valor + " " );
                                conn.fecha();

                                atualizaTabela();

                                JOptionPane.showMessageDialog( null, "Ligação excluída com sucesso!" );

                            } catch ( Exception e )
                            {
                                e.printStackTrace();
                            }
                        }
                    }

                } else
                {
                    JOptionPane.showMessageDialog( null, "Selecione uma ligação!", "Mensagem", JOptionPane.WARNING_MESSAGE );
                }


            }
        } );

        btnLimpar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                txt_dt_inicio.setDate( null );
                txt_dt_fim.setDate( null );
                comboClientes.setSelectedIndex( 0 );
                checkMinhasLig.setSelected( false );
                checkDesagrupar.setSelected( false );
                checkDesagrupar.setEnabled( false );
                btnExcluir.setEnabled( false );
                btnImprimir.setEnabled( true );


                atualizaTabela();
            }
        } );


        checkMinhasLig.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent e )
            {
                if ( checkMinhasLig.isSelected() )
                {
                    checkDesagrupar.setEnabled( true );
                    btnImprimir.setEnabled( false );
                } else
                {
                    checkDesagrupar.setSelected( false );
                    checkDesagrupar.setEnabled( false );
                    btnExcluir.setEnabled( false );
                    btnImprimir.setEnabled( true );
                }

                atualizaTabela();
            }
        } );

        checkDesagrupar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent e )
            {
                if ( checkDesagrupar.isSelected() )
                {

                    btnExcluir.setEnabled( true );
                    atualizaTabela();

                } else
                {

                    btnExcluir.setEnabled( false );
                    atualizaTabela();

                }
            }
        } );


        tabLigacoes.addMouseListener( new MouseListener()
        {

            @Override
            public void mouseClicked( MouseEvent e )
            {
                if( tabLigacoes.getModel() == modeloTabela2 )
                {
                    if ( e.getButton() == MouseEvent.BUTTON3 && tabLigacoes.getSelectedRow() != -1 )
                    {
                        int ticket = Integer.parseInt( tabLigacoes.getValueAt( tabLigacoes.getSelectedRow(), 5 ).toString() );

                        if ( ticket != 0 )
                        {
                            pop.show( tabLigacoes, e.getX(), e.getY() );
                        } else
                        {
                            int lig_recebida = Integer.parseInt( tabLigacoes.getValueAt( tabLigacoes.getSelectedRow(), 2 ).toString() );

                            if( lig_recebida != 0 )
                            {
                                pop2.show( tabLigacoes, e.getX(), e.getY() );
                            }else
                            {
                                JOptionPane.showMessageDialog( null, "Não é possível cadastrar ticket para ligações realizadas" );
                            }
                            
                        }

                    }

                    if ( e.getButton() == MouseEvent.BUTTON3 && tabLigacoes.getSelectedRow() == -1 )
                    {
                        JOptionPane.showMessageDialog( null, "Selecione uma linha da tabela de ligações" );
                    }
                }
            }

            @Override
            public void mousePressed( MouseEvent e )
            {
            }

            @Override
            public void mouseReleased( MouseEvent e )
            {
            }

            @Override
            public void mouseEntered( MouseEvent e )
            {
            }

            @Override
            public void mouseExited( MouseEvent e )
            {
            }
        } );


        itemVisualizar.addActionListener( new ActionListener()
        {

            @Override
            public void actionPerformed( ActionEvent e )
            {

                inspectOccurrence( Integer.parseInt( tabLigacoes.getValueAt( tabLigacoes.getSelectedRow(), 5 ).toString() ));

            }
        } );


        itemCadastrarTicket.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e )
            {
                int id_ligacao = Integer.parseInt(tabLigacoes.getValueAt( tabLigacoes.getSelectedRow(), 0 ).toString());

                createOccurrence( id_ligacao );

            }
        });

        txt_dt_inicio.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e )
            {
                atualizaTabela();
            }
        });

        txt_dt_fim.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e )
            {
                atualizaTabela();
            }
        });

        comboClientes.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e )
            {
                atualizaTabela();
            }
        });

    }

    public void atualizaTabela()
    {

        SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yyyy" );
        String dtInicio = "";
        String dtFim = "";
        int desagrupar = 0;
        int numLinhas = modeloTabela.getRowCount();
        int numLinhas2 = modeloTabela2.getRowCount();
        DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();
        centralizado.setHorizontalAlignment( SwingConstants.CENTER );

        for ( int x = numLinhas; x > 0; x-- )
        {
            modeloTabela.removeRow( 0 );
        }
        for ( int x = numLinhas2; x > 0; x-- )
        {
            modeloTabela2.removeRow( 0 );
        }


        try
        {
            dtInicio = sdf.format( txt_dt_inicio.getDate() );
        } catch ( Exception e )
        {
        }


        try
        {

            dtFim = sdf.format( txt_dt_fim.getDate() );
        } catch ( Exception e )
        {
        }



        consulta = "SELECT a.descricao as cliente, "
                + "sum(b.lig_recebida)as lig_recebida, "
                + "sum(b.lig_realizada)as lig_realizada "
                + "FROM clientes a "
                + "INNER JOIN ligacoes b "
                + "ON (a.id=b.ref_cliente) "
                + "INNER JOIN usuarios c "
                + "ON (b.ref_usuario=c.id) WHERE 1=1 ";

        String totalLigacoes = "SELECT sum(lig_recebida) + sum(lig_realizada) as total, "
                + "sum(lig_recebida)as lig_recebida, "
                + "sum(lig_realizada)as lig_realizada "
                + "FROM clientes a "
                + "INNER JOIN ligacoes b "
                + "ON (a.id=b.ref_cliente) "
                + "INNER JOIN usuarios c "
                + "ON (b.ref_usuario=c.id) WHERE 1=1 ";

        String condicao = "";


        Data dt = new Data();

        //data

        if ( ( dt.inverteSql( dtInicio ).equalsIgnoreCase( "0" ) == false ) && ( dt.inverteSql( dtFim ).equalsIgnoreCase( "0" ) == false ) )
        {
            condicao += " AND b.data BETWEEN '" + dt.inverteSql( dtInicio ) + "' AND '" + dt.inverteSql( dtFim ) + "' ";
        } else if ( ( dt.inverteSql( dtInicio ).equalsIgnoreCase( "0" ) == false ) && ( dt.inverteSql( dtFim ).equalsIgnoreCase( "0" ) ) )
        {
            condicao += " AND b.data >= '" + dt.inverteSql( dtInicio ) + "' ";
        } else if ( ( dt.inverteSql( dtInicio ).equalsIgnoreCase( "0" ) ) && ( dt.inverteSql( dtFim ).equalsIgnoreCase( "0" ) == false ) )
        {
            condicao += " AND b.data <= '" + dt.inverteSql( dtFim ) + "' ";
        }


        //cliente

        if ( comboClientes.getSelectedIndex() != 0 )
        {
            condicao += " AND a.descricao = '" + comboClientes.getSelectedItem().toString() + "' ";
        }

        //checkMinhas ligacoes

        if ( checkMinhasLig.isSelected() )
        {
            condicao += " AND c.id = " + FormPrincipal.getId_usuario() + " ";
        }


        //Cria consulta para Total Ligacoes
        totalLigacoes += condicao;

        //Total ligacoes labels;
        mostraTotal( totalLigacoes );


        if ( !checkDesagrupar.isSelected() )
        {
            consulta += condicao + " group by descricao order by descricao ";
        } else
        {
            consulta = "SELECT b.id,a.descricao as cliente, "
                    + "b.lig_recebida as lig_recebida, "
                    + "b.lig_realizada as lig_realizada, "
                    + "b.ticket as ticket, "
                    + "b.ref_ticket as id_ticket, "
                    + "b.data, "
                    + "b.hora "
                    + "FROM clientes a "
                    + "INNER JOIN ligacoes b "
                    + "ON (a.id=b.ref_cliente) "
                    + "INNER JOIN usuarios c "
                    + "ON (b.ref_usuario=c.id) WHERE 1=1 ";

            consulta += condicao;
            desagrupar = 1;
        }



        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( consulta );
        conn.fecha();

        try
        {

            if ( desagrupar == 1 )
            {

                while ( rs.next() )
                {

                    modeloTabela2.addRow( new Object[]
                            {
                                rs.getString( "id" ),
                                rs.getString( "cliente" ),
                                rs.getString( "lig_recebida" ),
                                rs.getString( "lig_realizada" ),
                                rs.getString(  "ticket" ),
                                rs.getInt( "id_ticket" ),
                                dt.inverteAplicacao( rs.getString( "data" ) ),
                                rs.getString( "hora" )
                            } );

                }
                tabLigacoes.setModel( modeloTabela2 );
                //Coluna ID oculta
                tabLigacoes.getColumnModel().getColumn( 0 ).setMaxWidth( 0 );
                tabLigacoes.getColumnModel().getColumn( 0 ).setMinWidth( 0 );
                tabLigacoes.getTableHeader().getColumnModel().getColumn( 0 ).setMaxWidth( 0 );
                tabLigacoes.getTableHeader().getColumnModel().getColumn( 0 ).setMinWidth( 0 );
                tabLigacoes.getColumnModel().getColumn( 5 ).setMaxWidth( 0 );
                tabLigacoes.getColumnModel().getColumn( 5 ).setMinWidth( 0 );
                tabLigacoes.getTableHeader().getColumnModel().getColumn( 5 ).setMaxWidth( 0 );
                tabLigacoes.getTableHeader().getColumnModel().getColumn( 5 ).setMinWidth( 0 );

                //Tamanho colunas
                tabLigacoes.getColumnModel().getColumn( 1 ).setPreferredWidth( 150 );
                tabLigacoes.getColumnModel().getColumn( 2 ).setPreferredWidth( 40 );
                tabLigacoes.getColumnModel().getColumn( 3 ).setPreferredWidth( 40 );
                tabLigacoes.getColumnModel().getColumn( 4 ).setPreferredWidth( 60 );
                tabLigacoes.getColumnModel().getColumn( 6 ).setPreferredWidth( 10 );
                tabLigacoes.getColumnModel().getColumn( 7 ).setPreferredWidth( 10 );

                //ordena colunas 1,2 tabela
                int colunas[] =
                {
                    2, 3
                };
                OrdenaColunaJTable.ordenaTabela ( colunas, modeloTabela2, tabLigacoes );


                // Centraliza valores tabela
                for ( int x = 2; x < modeloTabela2.getColumnCount(); x++ )
                {
                    tabLigacoes.getColumnModel().getColumn( x ).setCellRenderer( centralizado );
                }

            } else
            {
                while ( rs.next() )
                {
                    modeloTabela.addRow( new Object[]
                            {
                                rs.getString( "cliente" ),
                                rs.getString( "lig_recebida" ),
                                rs.getString( "lig_realizada" )
                            } );
                }


                tabLigacoes.setModel( modeloTabela );

                //Centraliza valores tabela
                for ( int x = 1; x < modeloTabela.getColumnCount(); x++ )
                {
                    tabLigacoes.getColumnModel().getColumn( x ).setCellRenderer( centralizado );
                }

                //Tamanho colunas
                tabLigacoes.getColumnModel().getColumn( 0 ).setPreferredWidth( 200 );
                tabLigacoes.getColumnModel().getColumn( 1 ).setPreferredWidth( 20 );
                tabLigacoes.getColumnModel().getColumn( 2 ).setPreferredWidth( 20 );


                //Ordena Colunas 1,2 tabela
                int colunas[] =
                {
                    1, 2
                };

                OrdenaColunaJTable.ordenaTabela( colunas, modeloTabela, tabLigacoes );

            }

        } catch ( Exception e )
        {

            JOptionPane.showMessageDialog( null, "Erro de Banco de dados : " + e );
        }

        conn.fecha();

    }


    public void mostraTotal( String consulta )
    {

        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( consulta );
        String total = "";
        String total_recebida = "";
        String total_realizada = "";

        try
        {
            while ( rs.next() )
            {
                total = rs.getString( "total" );
                total_recebida = rs.getString( "lig_recebida" );
                total_realizada = rs.getString( "lig_realizada" );
            }
        } catch ( Exception e )
        {
        }
        conn.fecha();

        lblTotal_ligacoes.setText( total );
        lblTotal_recebidas.setText( total_recebida );
        lblTotal_realizadas.setText( total_realizada );

    }

    public void atualizaComponentes()
    {
        txt_dt_inicio.setDate( null );
        txt_dt_fim.setDate( null );
        comboClientes.setSelectedIndex( 0 );
        checkMinhasLig.setSelected( false );
        checkDesagrupar.setSelected( false );
        checkDesagrupar.setEnabled( false );
        btnExcluir.setEnabled( false );

        atualizaTabela();
    }


    private void inspectOccurrence( int id_ticket )
    {
        try
        {
            Login l = com.interact.sas.cmn.ModuleContext.getInstance().getLoginManager().userLogin( FormPrincipal.getLogin_usuario() );

            if ( l != null )
            {

                ApplicationContext.getInstance().setActiveLogin( l );

                Occurrence o = com.interact.sas.qms.ModuleContext.getInstance().getOccurrenceManager().getOccurrence( id_ticket );

                Inspector.inspect( this, o );

            } else
            {
                Prompts.alert( this, "Usuario inválido" );
            }

        } catch ( Exception e )
        {
            e.printStackTrace();
        }
    }

    private void createOccurrence( int id_ligacao )
    {
        try
        {
            Login l = com.interact.sas.cmn.ModuleContext.getInstance().getLoginManager().userLogin( FormPrincipal.getLogin_usuario() );

            if ( l != null )
            {
                ApplicationContext.getInstance().setActiveLogin( l );

                OccurrenceType ot = com.interact.sas.qms.ModuleContext.getInstance().getOccurrenceTypeManager().getOccurrenceType( properties.getTipoOcorrencia() );



                if ( OccurrenceFormFactory.getInstance().edit( this, ot.getMnemonic() ) )
                {
                    Occurrence o = ( ( Occurrence ) OccurrenceFormFactory.getInstance().getForm( ot.getMnemonic() ).getContext() );

                    getSerial();

                    try
                    {
                        Banco conn2 = new Banco();
                        conn2.executarAtualizacao( "UPDATE ligacoes set ticket = '"+ ocorrencia.getSerial() +"', ref_ticket="+ ocorrencia.getId() +" WHERE id= "+ id_ligacao );
                        conn2.fecha();

                        atualizaTabela();

                    } catch ( Exception e )
                    {
                        JOptionPane.showMessageDialog( null, "Erro de banco de dados : " + e, "Erro", JOptionPane.ERROR );

                      
                    }

                }
            } else
            {
                Prompts.alert( this, "Usuario inválido" );
            }

        } catch ( Exception e )
        {
            e.printStackTrace();
        }
    }

    private void getSerial()
    {
        try
        {

            QueryResult rs = Database.getInstance().executeQuery( "SELECT max(id), max(serial) FROM qms_occurrences WHERE ref_type = " + properties.getTipoOcorrencia() );

            if ( rs.next() )
            {
                this.ocorrencia.setId( rs.getInt( 1 ) );
                this.ocorrencia.setSerial( rs.getString( 2 ) );
            }


        } catch ( Exception e )
        {
            e.printStackTrace();
        }

    }
}
